package br.gov.ms.tce.modelo.dao.impl;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Named;

import br.gov.ms.tce.bean.comum.Comparavel;
import br.gov.ms.tce.bean.comum.PessoaFisica;
import br.gov.ms.tce.bean.comum.TipoClassificacao;
import br.gov.ms.tce.cjur.factory.CodFactory;
import br.gov.ms.tce.modelo.dao.PessoaFisicaDAO;

@Named
public class PessoaFisicaDAOJPA extends GenericDAOJPA<PessoaFisica, Integer>
		implements PessoaFisicaDAO{

	
	/**
	 * @see br.gov.ms.tce.modelo.dao.PessoaFisicaDAO#findPessoaFisicaByCPF(java.lang.String, br.gov.ms.tce.bean.comum.TipoClassificacao)
	 */
	@Override
	public List<PessoaFisica> findPessoaFisicaByCPF(String cpf) {
		createCriteria();	
		query.select(root).where(cb.like(root.<String>get("cpf"), cpf),
				cb.notEqual(root.get("situacao"), TipoClassificacao.SITUACAO_PESSOA_DESCARTADO));		
				
		return getResultList();
	}

	/**
	 * @see br.gov.ms.tce.modelo.dao.impl.GenericDAOJPA#persist(java.lang.Object)
	 */
	@Override
	public void persist(PessoaFisica pf) {		
		super.persist(pf);
		persisteFilhos(pf, new ArrayList<Comparavel>(pf.getDocumentoPessoals()));
		persisteFilhos(pf, new ArrayList<Comparavel>(pf.getEmails()));
		persisteFilhos(pf, new ArrayList<Comparavel>(pf.getEnderecos()));
		persisteFilhos(pf, new ArrayList<Comparavel>(pf.getTelefones()));	
	}
	
	

	private void persisteFilhos(PessoaFisica pf, List<Comparavel> list) {
		for(Comparavel comp: list){			
			comp.setCod(CodFactory.create(comp, pf));
			super.entityManager.persist(comp);
		}		
	}
	
	
	


}